package com.wjw.java.others.abstract_;

/**
 * 模板设计模式：抽象类最佳实践
 */
public abstract class TemplateModel {//抽象类

    public static void main(String[] args) {
        A a = new A();
        a.calculateTime();
        System.out.println("-------------------------");
        B b = new B();
        b.calculateTime();
    }

    public abstract void job();//抽象方法

    public void calculateTime(){//实现方法,调用了抽象方法
        long startTime = System.currentTimeMillis();
        job();//动态绑定机制,当调用对象方法的时候,该方法会和该对象的"内存地址/运行类型"绑定
        long endTime = System.currentTimeMillis();
        System.out.println("job()方法执行共计："+ (endTime-startTime) +"毫秒");
    }
}
class A extends TemplateModel{
    //重写父类的抽象方法
    @Override
    public void job() {
        long num = 0;
        for (int i = 1; i <= 1000000; i++) {
            num += i;
        }
        System.out.println("A类中的job方法：num = "+num);
    }
}
class B extends TemplateModel{
    //重写父类的抽象方法
    @Override
    public void job() {
        long num = 0;
        for (int i = 1; i <= 8000000; i++) {
            num += i;
        }
        System.out.println("B类中的job方法：num = "+num);
    }
}